/*
 * Copyright (C) 2012 Luis Planes http://www.luisplanes.es
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.planesnet.thread1;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;

/**
 * 
 * Ejemplo de uso de Handler.
 * Desde un thread distinto al ThreadUI, se ejecuta un trabajo determinado, y mediante el
 * uso de un handler, se notifica a la interfaz la información de progreso del trabajo. 
 */
public class Thread1Activity extends Activity {

	ProgressBar progressBar1;
	Button btnInicio;
	TextView txtProgreso;

	
	/**
	 * Definición del handler. Aquí es donde se define como se tratan los mensajes recibidos.
	 */
	Handler handler = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			progressBar1.setProgress(msg.arg1);
			if (msg.obj != null)
				txtProgreso.setText((String) msg.obj);

		}
	};

	/** Inicializa la actividad principal */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		progressBar1 = (ProgressBar) findViewById(R.id.progressBar1);
		progressBar1.setMax(100);
		btnInicio = (Button) findViewById(R.id.btnInicio);
		txtProgreso = (TextView) findViewById(R.id.txtProgreso);

	}

	
	/**
	 * Lanza en trabajo como un Thread en segudo plano.
	 * El trabajo a realizar se simula con la espera Thread.sleep(x);
	 */
	public void inicioProgreso() {
		progressBar1.setProgress(0);

		Thread background = new Thread(new Runnable() {
			Message mensaje;

			public void run() {

				try {
					for (int i = 0; i <= 100; i++) {
						Thread.sleep(200);
						mensaje = handler.obtainMessage();
						mensaje.arg1 = i;
						mensaje.obj = "Progreso : " + i + "%";
						handler.sendMessage(mensaje);
					}
				} catch (Throwable t) {
				}
				mensaje = handler.obtainMessage();
				mensaje.arg1 = 100;
				mensaje.obj = "Fin del trabajo";
				handler.sendMessage(mensaje);

			}
		});
		background.start();
	}

	
	// Método que se invoca al pulsar el botón de la interfaz.
	public void onClick(View v) {
		inicioProgreso();
	}

}
